220 PRINT J;".";: HTAB 8: FOR I = 1 TO H: PRINT S(I);" ";: NEXT : IF Q = 4 THEN FOR I = 1 TO H: POKE 7160 +I,PT(I): POKE 7152 +I,C(I): NEXT : CALL 7168: CALL 7266: GOSUB 570: RETURN
225 GOSUB 65
230 RETURN
300 TEXT : CLEAR :P = 6: REM MENU
310 HOME : VTAB 3: PRINT "YOU CAN:": PRINT : PRINT : PRINT "1. PLAY AGAINST THE MACHINE": PRINT : PRINT "2. BREAK CODES YOURSELF": PRINT
315 PRINT "3. GIVE THE MACHINE CODES TO BREAK": PRINT : PRINT "4. WATCH THE MACHINE SET UP CODES AND THEN BREAK THEM ON A CONTINUOUS BASIS": PRINT "5. END"
320 VTAB 19: PRINT "WHICH ... ";
321 GOSUB 160
322 POKE -16368,0:Q = Z -176: IF Q <1 OR Q >5 THEN 321
323 INVERSE : PRINT CHR$(Q +48): NORMAL
325 IF Q = 5 THEN END
330 IF Q = 1 THEN 920
335 GOTO 1000
400 HOME : INVERSE : PRINT "TO STOP PRESS SPACE BAR": POKE 34,1
410 CALL 7232: GOSUB 30: FOR I = 1 TO H:C(I) = INT( RND(3) *C +1): POKE 7936 +I,I: NEXT :J = 1
415 PRINT : PRINT : PRINT "CODE = ";: INVERSE : FOR I = 1 TO H -1: PRINT G(C(I));" ";: NEXT : PRINT G(C(H)): NORMAL : PRINT : PRINT J;".";: HTAB 8: FOR I = 1 TO H: PRINT G(I);" ";: NEXT
420 FOR I = 1 TO H: POKE 7160 +I,I: POKE 7152 +I,C(I): NEXT : CALL 7168: GOSUB 570: CALL 7266: IF PEEK(3) = H THEN 450
425 T = PEEK(3) + PEEK(4): IF T <H -1 THEN GOSUB 200
430 GOTO 440
435 FOR I = 1 TO H: POKE 7160 +I, PEEK(7 +I): POKE 7152 +I,C(I): NEXT : CALL 7168: GOSUB 570
440 IF PEEK(3) = H THEN 450
445 CALL 7266: CALL 7332:J = J +1: PRINT J;".";: HTAB 8: FOR I = 1 TO H: PRINT G( PEEK(7 +I));" ";: NEXT : GOTO 435
450 IF PEEK( -16384) < >160 THEN 410
452 FOR I = 1 TO 30: NEXT :V = PEEK(37)
455 POKE -16368,0: INVERSE : VTAB 1: PRINT "SPACE BAR TO CONTINUE, 'ESC' TO EXIT": WAIT -16384,128
460 PE = PEEK( -16384): POKE -16368,0: IF PE < >155 THEN VTAB 1: CALL -868: PRINT "TO STOP PRESS SPACE BAR": NORMAL : POKE 37,V: GOTO 410
465 NORMAL : GOTO 300
480 HOME : INVERSE : PRINT " CODE BREAKING ";H;" HOLES ";C;" COLORS ": NORMAL :N$ = "YOUR"
490 GOTO 530
500 TEXT : HOME : INVERSE : PRINT "GAME ";1 + INT(N/2);" OF ";G;" YOUR TURN ";H;" HLS ";C;" CLRS": NORMAL
530 FOR I = 1 TO H:G(I) = INT( RND(3) *C +1): NEXT :J = 1
560 FOR I = 1 TO H: POKE 7160 +I,G(I): POKE 7152 +I,C(I): NEXT : CALL 7168
565 IF Q < >4 THEN VTAB J +P
570 HTAB 29: PRINT PEEK(3);: HTAB 35: PRINT PEEK(4): IF Q = 4 THEN RETURN
575 A = A +1: IF Q = 1 THEN GOSUB 150
580 IF PEEK(3) <H THEN J = J +1: GOTO 545
590 IF Q = 1 THEN PRINT : PRINT LEFT$(N$, LEN(N$) -2);", ";
600 PRINT "YOU DID IT IN ";J;" MOVES<CTRL-G>."
610 N = N +1
649 GOSUB 110
650 IF N = 2 *G THEN 4000
660 ON Q GOTO 1030,480,0
800 HOME : HTAB 17: PRINT "RULES ": PRINT : PRINT "INTEGERS BETWEEN 1 AND THE NUMBER SPECI-FIED BY THE PLAYER (9 IS MAXIMUM) ARE USED TO DENOTE 'COLORS', OTHERWISE STAN-DARD MASTERMIND RULES APPLY."
805 PRINT
810 PRINT "IN SCORING A ROW 'BLACK' IS THE NUMBER OF ENTRIES CORRECT IN VALUE AND POSI- TION, 'WHITE' IS THE NUMBER OF ENTRIES CORRECT IN VALUE ONLY. EACH ENTRY IS SCORED ONLY ONCE."
815 PRINT
820 PRINT "EITHER 4 OR 5 HOLES CAN BE CHOSEN. THE APPLE FULLY DUPLICATES A HUMAN OPPONENT AS CODEMAKER OR CODEBREAKER."
825 PRINT
830 PRINT "BE CAREFUL IN SCORING THE APPLE (REMEM- BER IT DOES NOT MAKE MISTAKES AND CAN DETECT YOUR OWN EASILY) SO THAT YOU DO NOT LOSE POINTS."
900 PRINT : PRINT : PRINT "DO YOU WANT THE RULES (Y/N)? ":
905 GOSUB 160
907 IF Z = 217 THEN GOSUB 800
910 RETURN
920 HOME : PRINT : PRINT "WHAT IS YOUR NAME ";: INPUT N$:N$ = LEFT$(N$,8) +"'S": PRINT : IF LEN(N$) <3 THEN N$ = N$ +" "
925 PRINT "HOW MANY GAMES DO YOU WANT TO PLAY,": PRINT LEFT$(N$, LEN(N$) -2);"?";: INPUT " ";G: IF G <3 OR G >99 THEN PRINT "MINIMUM 3 GAMES, MAXIMUM 99 GAMES": GOTO 925
1000 PRINT : PRINT "HOW MANY HOLES (4 OR 5)? ": GOSUB 160:H = Z -176
1005 IF H >5 OR H <4 THEN 1000
1010 PRINT : PRINT "HOW MANY COLORS (";6 *(H = 4) +8 *(H = 5);" TO ";7 *(H = 4) +9 *(H = 5);")": GOSUB 160:C = Z -176
1015 IF (C >9 OR C <8) AND H = 5 THEN 1010
1017 IF (C >7 OR C <6) AND H = 4 THEN 1010
1020 POKE 5,H: POKE 7,C
1021 ON Q GOTO 1029,480,1022,400
1022 HOME : INVERSE : PRINT " MACHINE BREAKS CODE ";H;" HOLES ";C;" COLORS ": NORMAL : GOTO 1035
1029 PRINT "DO YOU WANT TO START (Y/N)? ": GOSUB 160: IF Z = 217 THEN 500
1030 HOME : INVERSE : PRINT "GAME "; INT(1 +N/2);" OF ";G;" MY TURN ";H;" HLS ";C;" CLRS": NORMAL
1035 CALL 7232: VTAB 10: PRINT "PREPARE A CODE FOR ME TO BREAK": PRINT : GOSUB 110: VTAB 9: CALL -958
1050 GOSUB 30: FOR I = 1 TO H: POKE 7936 +I,I: NEXT :J = 1
1055 S = S +1: IF Q = 1 THEN GOSUB 150
1060 PRINT J;".";: HTAB 8: FOR I = 1 TO H: PRINT G(I);" ";: NEXT
1062 GOSUB 65
1065 IF T <H -1 THEN GOSUB 200
1066 GOTO 1110
1070 GOSUB 65
1110 J = J +1: VTAB J +P: PRINT J;".";: HTAB 8: FOR I = 1 TO H: PRINT G( PEEK(7 +I));" ";: NEXT
1120 S = S +1: PRINT : IF Q = 1 THEN GOSUB 150
1130 GOTO 1070
2000 PRINT : PRINT "I DID IT IN ";J;" MOVES<CTRL-G><CTRL-G><CTRL-G>"
2050 GOSUB 110
2058 IF Q = 3 THEN 1022
2060 N = N +1: IF N = 2 *G THEN 4000
2070 GOTO 500
2999 END
3000 VTAB 20: INVERSE : PRINT "YOU HAVE MADE A MISTAKE IN SCORING<CTRL-G><CTRL-G><CTRL-G>";: IF Q = 3 THEN PRINT : PRINT : NORMAL : GOSUB 110: GOTO 1022
3005 PRINT ", AND": HTAB 7: PRINT "THUS WILL LOSE 3 POINTS!!!": NORMAL
3010 A = A +3:S = S -J: PRINT "THIS GAME WILL NOW BE REPLAYED": GOSUB 110: GOTO 1030
4000 HOME : VTAB 5: PRINT LEFT$(N$, LEN(N$) -2);", YOUR SCORE IS ";S: PRINT : PRINT "MY SCORE IS ";A: PRINT : IF A >S THEN PRINT "AS USUAL, I WIN<CTRL-G>!<CTRL-G>!<CTRL-G>!": GOTO 4050
4010 IF A = S THEN PRINT "IT IS A TIE": GOTO 4050
4030 PRINT "YOU WIN"
4050 PRINT : PRINT "ANOTHER GAME (Y/N)? ";: GET A$: IF A$ = "Y" THEN A = 0:S = 0:G = 0:N = 0: PRINT : HOME : GOTO 925